console.log("test3.js");

// 代码块1
{
    const execute = true;
    // const execute = false;
    console.log("代码块1 ,execute:",execute);
    if(execute){
        const student = {
            name: 'John',
            age: 30,
            sayHello: function() {
                console.log('Hello!');
            }
        };

        console.log(typeof (student) === 'object' );
        console.log(typeof (student) == 'object' );

        console.log(typeof (student));

        const atrributes = Object.keys(student);
        atrributes.forEach(item=>{
            // 获取对象的属性
            console.log(item + ":" + student[item] + ",typeof(" + student[item] + "):" + typeof (student[item]));
        })




    }
}

// 代码块2
{
    const execute = true;
    // const execute = false;
    console.log("代码块2 ,execute:",execute);
    if(execute){


    }
}

// 代码块3
{
    const execute = true;
    // const execute = false;
    console.log("代码块3 ,execute:",execute);
    if(execute){


    }
}


// 代码块4
{
    const execute = true;
    // const execute = false;
    console.log("代码块4 ,execute:",execute);
    if(execute){
        let ajax;
        if(ajax){
            console.log("have ajax");
        }else{
            console.log("not ajax");
        }

    }
}


// 代码块5
{
    const execute = true;
    // const execute = false;
    console.log("代码块5 ,execute:",execute);
    if(execute){


    }
}


/**
 * 定义1个类-这边是工具类
 */
class Utils{
    /**
     * 这边是静态方法
     * @param item
     */
    static printInfo(item){
        console.log("printInfo() item:",item);

        // 只定义，没有初始化为这个
        if(undefined == item){
            console.log("printInfo() undefined == item,return");
            return;
        }

        //
        if(null == item){
            console.log("printInfo() null == item,return");
            return;
        }

        const typeOfItem = (typeof (item));
        console.log("printInfo() typeOfItem:",typeOfItem);

        if(item instanceof Function){
            console.log("printInfo() 是一个函数,return");
            // 没有调用所以不会知道
            console.log("printInfo() 函数名称为:",item.name, ",函数参数:" + item.arguments,"函数参数长度为:",item.length);
            return;
        }

        // 想判断是否为数组
        // TypeError: Cannot read properties of undefined (reading 'call')
        // if(Array.prototype.isArray.call(item)){
        //     console.log("printInfo() 是一个数组,return");
        //     return;
        // }

        if(item instanceof Object){
            console.log("printInfo() 是一个对象,return");
            return;
        }



    }
}

// Utils.printInfo(111);
// let a;
// Utils.printInfo(undefined)
// Utils.printInfo(a)


// 这边所有的参数必须Wie字符串
const g = new Function ("ss",
    "msg","alert(\"Hello \" + ss + msg);");

function f(a,b){
    // 在函数调用的地方，才知道具体传递的参数
    console.log(arguments);
    return a + b;
}

// Utils.printInfo(f);

Utils.printInfo(g);

// let s = {};
// Utils.printInfo(s);

// let ss = [2,3];
// Utils.printInfo(ss);